package com.winning.pmph.entity;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.winning.pmph.utils.Const;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang.StringUtils;

import javax.persistence.Table;

@Data
@EqualsAndHashCode(callSuper = true)
@Table(name = "KNOWLEDGE_FIELD")
public class KnowledgeField extends BaseEntity {

    /**
     * ID
     */
    @TableId
    private String id;
    /**
     * 字段名称
     */
    private String name;
    /**
     * 字段类型;0：属性，1：富文本，2：下拉列表
     */
    private Integer kind;
    /**
     * 属性
     */
    private String property;
    /**
     * 经过135编辑器编辑过后的内容
     */
    @TableField("property_editor135")
    private String propertyEditor135;

    @TableField(exist = false)
    private Object fieldValue;  // 前端展示使用;
    /**
     * 所属知识ID
     */
    private String knowledgeId;
    /**
     * 是否必填。1：必填，0：不必填
     */
    private Boolean required;

    /**
     * 是否隐藏
     */
    private int hidden;
    /**
     * 来源
     */
    private JSONArray source;
    /**
     * 规则属性值
     */
    private String kindValue;
    /**
     * 知识显示名称
     */
    private String displayName;
    private String knowledgeLibFieldId;
    /**
     * index, 排序字段, 只有固定字段(库字段)有值, 动态字段为空, 所以必须使用Integer
     */
    @TableField("`index`")
    private Integer index;

    @TableField(exist = false)
    private String status;  // temp: 0, released: 1;
    @TableField(exist = false)
    private String knowledgeLibId;
    // 名称同义词, 用于素材库转知识, 字段匹配, 库字段数据库存储;
    @TableField(exist = false)
    private JSONArray synonym;
    // 前端 详情页面使用;
    @TableField(exist = false)
    private boolean selected;

    /**
     * 存储静态资源来源时使用
     */
    @TableField(exist = false)
    private String knowledgeName;

    public String getProperty() {
        return StringUtils.defaultIfEmpty(property, Const.KNOWLEDGE_FIELD_VALUE_DEFAULT.get(kind));
    }

    /**
     * 统计字数, 应该是计算属性, 不再存储到数据库;
     */
    @TableField(exist = false)
    private int wordsCount;
    public int getWordsCount() {
        return StringUtils.defaultString(property, StringUtils.EMPTY).length();
    }
}
